from django.core.management.base import BaseCommand, CommandError
from django import apps
from django.db import transaction
from django.contrib.auth.models import Group
from apps.user.models import TunLevel
from apps.system.models import SystemSetting
from decimal import Decimal as D

datas = [
    {
        "model":    Group,
        "rows": [
            {"name":  "REPO",},
            {"name":  "SUPERUSER",}
        ]
    },
    {
        "model":    TunLevel,
        "rows": [
            {"name": "小白菜", "need_grow_coin": 0},
            {"name": "灰铁", "need_grow_coin": 50},
            {"name": "青铜", "need_grow_coin": 200},
            {"name": "白银", "need_grow_coin": 500},
            {"name": "黄金", "need_grow_coin": 1000},
            {"name": "铂金", "need_grow_coin": 2000},
            {"name": "钻石", "need_grow_coin": 5000},
            {"name": "最强囤主", "need_grow_coin": 20000},
            {"name": "殿堂囤主", "need_grow_coin": 50000},
        ]
    },
    {
        "model":    SystemSetting,
        "rows": [
            {
                "postage": D('12.00'),
                "postage_preferential": D('0.00'),
                "procedure":    D('5.00'),
                "procedure_preferential":   D('0.00'),
                "repo_cost_preferential":   D('0.00'),
                "app_service_protocol": """
服务条款

更新于2018年03月25日

北京囤囤链科技有限公司（以下简称“囤囤”或“我们”）尊重并保护用户（以下简称“您”或“用户”）的隐私，您使用囤囤时，囤囤将按照本隐私政策（以下简称“本政策”）收集、使用您的个人信息。

本政策可由囤囤在线随时更新，更新后的政策一旦公布即代替原来的政策，如果您不接受修改后的条款，请立即停止使用囤囤，您继续使用囤囤将被视为接受修改后的政策。经修改的政策一经在囤囤上公布，立即自动生效。

您知悉本政策及其他有关规定适用于囤囤及囤囤上所自主拥有的DApp。

1. 服务条款的确认及接受

1.1 本站的各项电子服务的所有权和运作权归北京囤囤链科技有限公司所有。您同意服务条款及隐私条款并完成注册程序后，即成为囤囤的正式用户。用户确认：本服务条款是处理双方权利义务的契约，始终有效，法律另有强制性规定或双方另有特别约定的，依其规定。

1.2 您点击同意本服务条款，即视为您确认自己已具有与享受本站提供的交易方式、下单购物、交易手续费、仓储费、快递费等服务相对应的权利能力和行为能力，并能够独立承担法律责任。

1.3 如果您未满18周岁，您只能在父母或监护人的监护参与下才能使用APP的交易服务或下单购买等。

1.4 囤囤链保留在中华人民共和国大陆地区法现行法律法规允许的范围内自行决定拒绝服务、关闭用户账户、清除或编辑内容或取消订单等的权利。

1.5软件著作权及App上发布的所有信息与内容的版权均受中华人民共国著作权法（含相关法律、法规）乃至世界版权法律的保护，仅供用户因自身学习、调研等目的免费使用。严禁未经授权对本站内容进行复制、发行、出租、展览、放映、广播、修改、演绎、翻译、汇编、改编或逆向工程。北京囤囤链科技有限公司保留所有未在本服务条款中明确授予的权利。

1.6 囤囤链通过互联网依法为用户提供互联网信息等服务，您在完全同意本服务条款及本站其他规定（包括但不限于隐私条款、社区公约、社区规范、训练提示、退换货政策等在本站发布的所有规则及政策）的情况下，方有权使用本站的相关服务。

1.7 用户必须自行准备如下设备并承担如下开支：（1）上网设备，包括并不限于电脑或者其他上网终端、调制解调器及其他必备的上网装置；（2）上网开支，包括并不限于网络接入费、上网设备租用费、手机流量费等。

2. 囤囤账号注册规则

2.1 囤囤账号注册资料包括但不限于用户的账号名称、头像、密码、注册或更新账号时输入的所有信息以及您在囤囤进行购物时所填写的所有信息（包括但不限于收货人姓名、地址、联系电话等）。

2.2 在注册囤囤账号时，用户应承诺遵守法律法规、社会主义制度、国家利益、公民合法权益、公共秩序、社会道德风尚和信息真实性等七条底线，且保证在注册及使用囤囤账号时，不得有以下情形：

（1）违反宪法或法律法规规定的；

（2）危害国家安全，泄露国家秘密，颠覆国家政权，破坏国家统一的；

（3）损害国家荣誉和利益的，损害公共利益的；

（4）煽动民族仇恨、民族歧视，破坏民族团结的；

（5）破坏国家宗教政策，宣扬邪教和封建迷信的；

（6）散布谣言，扰乱社会秩序，破坏社会稳定的；

（7）散布淫秽、色情、赌博、暴力、凶杀、恐怖或者教唆犯罪的；

（8）侮辱或者诽谤他人，侵害他人合法权益的；

（9）含有法律、行政法规禁止的其他内容或违反囤囤的其他规定的。

2.3 用户应保证其提供的注册资料真实、准确、完整、合法有效，用户注册资料如有变动的，应及时更新。因用户提供的注册资料不符合本条款约定而引起的一切责任及后果（包括但不限于不予注册、账户停用或注销等），由用户自行承担，且囤囤链保留终止用户使用囤囤各项服务的权利。

2.4 用户以虚假信息骗取账号名称注册，或其账号头像、简介等注册信息存在违法和不良信息的，囤囤链有权采取通知限期改正、暂停使用、注销登记等措施。

2.5 对冒用、关联机构或社会名人注册账号名称的用户，囤囤链有权注销其账号，并向互联网信息内容主管部门报告。

2.6 用户在使用本站服务或下单购物等活动时，涉及用户真实姓名/名称、通信地址、联系电话、电子邮箱等隐私信息的，本站将予以严格保密，除非得到用户的授权或法律另有规定，本站不会向外界披露。

2.7 用户成功注册后，将产生用户名和密码等账户信息，您可以根据本站规定更改您的密码。用户应谨慎合理的保存、使用其用户名和密码。用户若发现任何非法使用用户账号或存在安全漏洞的情况，请立即通知本站并向公安机关报案。因用户未妥善保管其账户名称及密码而导致第三人使用账户而给用户造成的损失，由用户自行承担。

2.8 您的囤囤账户仅限于您自己使用，严禁将您的囤囤账户允许第三人使用，否则用户应承担由此产生的全部责任，并与实际使用人承担连带责任。

2.9 依据相关法律法规的规定，囤囤链有权对注册用户进行基于移动电话号码、电子邮箱、微信等真实身份信息认证。对于拒绝进行真实身份信息认证的用户，囤囤链保留拒绝此用户使用囤囤相关服务的权利并有权对用户进行包括但不限于限制服务使用、关闭账号等的处理。

3.用户管理

3.1 用户必须遵守中华人民共和国及国际相关法律法规的规定，独立对其发布的内容（包括但不限于文字、图片等）承担责任。用户承诺：

（1）用户在使用我们提供的服务或在本站发布信息时必须符合中华人民共和国相关法律法规的规定，不得在本站制作、复制、发布、传播以下内容或信息：

(a) 违反宪法确定的基本原则的；

(b) 危害国家安全，泄露国家秘密，颠覆国家政权，破坏国家统一的；

(c) 损害国家荣誉和利益的；

(d) 煽动民族仇恨、民族歧视，破坏民族团结的；

(e) 破坏国家宗教政策，宣扬邪教和封建迷信的；

(f) 散布谣言，扰乱社会秩序，破坏社会稳定的；

(g) 散布淫秽、色情、赌博、暴力、恐怖或者教唆犯罪的；

(h) 侮辱或者诽谤他人，侵害他人合法权益的；

(i) 煽动非法集会、结社、游行、示威、聚众扰乱社会秩序的；

(j) 以非法民间组织名义活动的；

(k) 含有法律、行政法规禁止的其他内容或违反囤囤的其他规定的。

（2）用户在使用我们提供的服务或在本站发布信息时还必须符合其他有关国家和地区的法律规定以及国际法的有关规定。

3.2 用户理解并同意，其在本站发布的任何信息（包括但不限于文字、图片等），均已自动授权囤囤链或囤囤在包含宣传推广在内的各个合法途径使用。若用户对囤囤链或囤囤使用信息的方式存在异议，应在发现后及时联系囤囤链或囤囤进行沟通解决，若用户未对囤囤链或囤囤的使用行为提出异议，则默认其同意此种使用行为且无权就上述使用主张权利。

3.3 用户不得以任何方式干扰囤囤服务且不得通过本站发布任何形式的广告，囤囤对用户发布的广告内容有权进行包括但不限于删除内容直至关闭账号的处理。因网络信息传播在时间上的即时性及空间上的广泛性，我们不可能在第一时间对用户发布广告的行为进行处理，在此提请用户需对此种广告的内容自行甄别，因用户受此种广告内容的影响而产生的任何损失，均与囤囤链或囤囤无关。囤囤鼓励用户对上述广告发布行为进行举报，我们会在收到举报后及时处理。

3.4 责任承担

（1）用户须对自己在使用囤囤服务过程中的行为承担法律责任。用户承担法律责任的形式包括但不限于：对受到侵害者进行赔偿，以及在囤囤链公司首先承担了因用户行为导致的行政处罚或侵权损害赔偿责任后，用户应给予囤囤链公司等额的赔偿。若用户违反以上规定，我们有权作出独立判断立即暂停或终止对用户提供部分或全部服务，包括锁定、注销、删除用户囤囤账号等措施。

（2）用户理解，如果囤囤发现其发布的信息明显属于本条第（1）款所列内容之一，依据中华人民共和国现行相关法律，本站有义务立即停止传输，保存有关记录，向国家有关机关报告，并且删除含有该内容的地址、目录或关闭服务器。

4.用户隐私制度

4.1 用户知悉并同意，为了记录用户训练的真实数据以及在电商功能下给用户提供配送等相关服务，我们在您自愿的前提下收集您的个人信息并将这些信息进行整合，包括但不限于注册账号时的相关信息、个人身体数据（身高、体重、健康数据等）、GPS定位数据、收货人的姓名、地址、电话等。

4.2 尊重用户个人隐私是囤囤的一项基本政策。所以，囤囤不会公开或向任何第三方透露用户的注册资料以及用户因享受囤囤服务而提供的任何信息，但以下情形除外：

（1）事先获得用户的明确授权或许可；

（2）遵守有关法律规定，包括在国家有关机关查询时，提供用户的注册信息、用户在本站发布的信息内容及其发布时间、互联网地址或者域名等；

（3）在紧急情况下竭力维护用户个人和社会大众的隐私安全；

（4）根据本条款相关规定或者囤囤认为必要的其他情形。

囤囤可能会与第三方合作向用户提供相关的网络服务，在此情况下，如该第三方同意承担与囤囤同等的保护用户隐私的责任，则囤囤可将用户信息提供给该第三方。

5.电商服务

为满足用户对健身周边产品的需求，本站特向用户提供电商服务。囤囤销售的产品以自营为主，亦有部分合作品牌产品的代销。在售产品信息可至囤囤 App内的商城进行浏览、查询及购买。

5.1 商品信息

商品价格、数量、性能介绍、是否有货等商品信息随时都有可能发生变动，囤囤不作特别通知，请用户至商品销售页面自行查看。我们会尽最大努力保证您所浏览的商品信息的准确性，但由于商品种类繁多且商品信息的数量较大，加之互联网技术因素等客观原因存在，本站显示的信息可能会有一定的滞后性或差错，对此情形请您知悉并理解。囤囤欢迎纠错，并会视情况给予纠错者一定的奖励。

5.2 订单

5.2.1 在您下订单时，请仔细确认所购商品的名称、价格、数量、型号、规格、尺寸、收货人、电话、收货地址等信息。收货人与您本人不一致的，收货人的行为和意思表示视为您的行为和意思表示，您应对收货人的行为及意思表示的法律后果承担连带责任。您提交订单即表示对订单中所确认的订购商品、收货地址等信息的准确性负责。如果因为您填写的收货人联系电话、地址等信息错误，导致我们（或我们委托的配送公司）将货物交付给非您本意的收货人的，由此造成的损失需由您自行承担。

5.2.2 如果您通过囤囤 App订购商品，囤囤商城展示的商品和价格等信息仅仅作为要约邀请，您的订单将成为订购商品的要约。收到您的订单后，我们会及时为您发货，只有当我们向您发出发货确认的电子邮件或短信，通知您我们已将您订购的商品发出时，才构成我们对您的订单的接受，您与我们之间的订购合同才成立。如果您在一份订单里订购了多种商品，而我们只向您发出了其中部分商品的发货确认电子邮件或短信，那么我们和您之间的订购合同仅就该部分商品成立。

5.2.3 用户同意，囤囤链拥有通过邮件、短信电话等形式，向在本站注册、购物用户、收货人发送订单信息、促销活动等告知信息的权利。

5.2.4 由于市场变化及各种以合理商业努力难以控制的因素的影响，我们无法保证您提交的订单信息中希望购买的商品都会有货；如您拟购买的商品，在任何购买环节发生缺货或无货，您有权取消订单。

5.2.5 为回馈用户的支持，我们会不定期向用户发放一些优惠券或代金券，上述优惠券或代金券的发放数量及规则由囤囤自行决定，且由囤囤享有解释权和修改权。您有权按照优惠券或代金券的使用规则在本站购物时的使用，严禁转卖囤囤优惠券或代金券或利用囤囤账户进行其他经营性行为等。

5.2.6 关于支付形式、商品退换货、售后服务等相关问题，请在商品销售页面或至『帮助中心-商城』查看。若您在商品购买过程中遇到任何问题，均可发送邮件至 aftersales@gotokeep.com，我们的客服人员会及时与您取得联系并帮助您解决问题。

5.3 配送

5.3.1 我们将会把商品（货物）送到您指定的收货地址，所有在本站上列出的以及客服告知的送达时间为参考时间，参考时间的计算是在综合考量库存状况、正常的处理过程和送货时间、送货地点的基础上估算得出的。参考时间可能与实际送达的时间有所出入，请您知悉并理解。

5.3.2 因如下情形造成订单延迟或无法配送等，囤囤不承担延迟配送的责任：

（1）因用户提供的信息错误、地址不详细等原因导致的；

（2）货物送达后无人签收，导致无法配送或延迟配送的；

（3）情势变更因素导致的；

（4）不可抗力因素导致的，例如：自然灾害、交通戒严、突发战争等。

6.所有权及知识产权条款

6.1 用户一旦接受本服务条款，即表明该用户主动将其在本站发表的任何形式的信息内容（包括但不限于用户评论、用户咨询、各类话题文章等）的财产性权利等任何可转让的权利，如著作权财产权（包括并不限于：复制权、发行权、出租权、展览权、表演权、放映权、广播权、信息网络传播权、摄制权、改编权、翻译权、汇编权以及应当由著作权人享有的其他可转让权利）等，全部独家且不可撤销地转让给囤囤链所有，用户同意囤囤链有权就任何主体侵权而单独提起诉讼。

6.2 本服务条款已经构成《中华人民共和国著作权法》第二十五条及相关法律规定的著作财产权等权利转让的书面协议，其效力及于用户在本站发布的任何受著作权法保护的作品内容，无论该等内容形成于本服务条款订立前还是订立后。

6.3 用户同意并已充分了解本条款的含义，承诺不将已发表于本站的信息，以任何形式发布或授权其它主体以任何方式使用（包括但不限于在各类网站、媒体上使用）。

6.4 囤囤链（含其关联企业）是囤囤 App的所有者及运营者，拥有囤囤 App内容、资源及软件的著作权等合法权利，受国家法律保护，有权不时地对本服务条款、囤囤 App版本及内容进行修改或更新，并在App内张贴或直接更新，无须另行通知用户。在法律允许的最大限度范围内，囤囤链（含其关联企业）对本条款及囤囤 App内容拥有解释权。

6.5 除法律另有强制性规定外，未经囤囤链（含其关联企业）明确的特别书面许可，任何单位或个人不得以任何方式非法地全部或部分复制、转载、引用、链接、抓取或以其他方式使用本站及囤囤 App内的信息内容，否则，囤囤链有权追究其法律责任。

6.6 本站及囤囤 App内所刊登的资料信息（诸如文字、图表、标识、按钮图标、图像、声音文件片段、 数字下载、数据编辑和软件），均是囤囤链或其内容提供者的财产，受中华人民共和国和国际版权法及相关法律法规的保护；上述内容的汇编是囤囤链的排他财产，受中华人民共和国和国际版权法及相关法律法规的保护；本站上所有软件都是囤囤链（含其关联公司）的财产，受中华人民共和国和国际版权法及相关法律法规的保护。

7.责任限制及不承诺担保

7.1 除非另有明确的书面说明，本站及其所包含的或以其它方式通过本站提供给您的全部信息、内容、材料、产品（包括软件）和服务，均是在"按现状"和"按现有"的基础上提供的。

7.2 除非另有明确的书面说明，我们不对本站的运营及其包含在本站上的信息、内容、材料、产品（包括软件）或服务作任何形式的、明示或默示的声明或担保（根据中华人民共和国法律另有规定的以外）。

7.3 我们不担保本站所包含的或以其它方式通过本站提供给您的全部信息、内容、材料、产品（包括软件）和服务、其服务器或从本站发出的电子信件、信息没有病毒或其他有害成分。

7.4 如因不可抗力或其它本站无法控制的原因使本站服务系统崩溃或无法正常使用导致服务不可用或网上交易无法完成或丢失有关的信息、记录等，我们会合理地尽力协助处理善后事宜。

8.协议更新及用户关注义务

根据国家法律法规的更新及网站运营需要，我们有权对本条款不时地进行修改，修改后的服务条款一旦被张贴在本站上即生效力，并代替原来的服务条款。用户可随时登录查阅最新服务条款内容。如用户不同意更新后的服务条款，应立即停止接受本站提供的服务；如用户继续使用本站提供的服务，即视为同意更新后的服务条款。我们建议您在使用本站之前阅读本服务条款及本站的公告。如果本服务条款中任何一条被视为废止、无效或因任何理由不可执行，该条应视为可分的且并不影响任何其余条款的有效性和可执行性。

9.法律管辖和适用

本服务条款的订立、执行和解释及争议的解决均应适用在中华人民共和国大陆地区现行之有效法律。 如发生本服务条款的某些内容与适用之法律相抵触时，则这些条款将完全按法律规定重新解释，而其它有效条款继续有效。如缔约方就本条款内容或其执行发生任何争议，双方应尽力友好协商解决；协商不成时，任何一方均可向有管辖权的中华人民共和国大陆地区法院提起诉讼。

10.其他

10.1 囤囤的所有者是指在政府部门依法许可或备案的囤囤 App的经营主体。

10.2 我们尊重用户和消费者的合法权利，本服务条款及本站上发布的各类规则、政策、声明等其他内容，均是为了更好的、更加便利的为用户和消费者提供服务。囤囤欢迎用户和社会各界提出意见和建议，您可以通过以下电子邮箱联系我们：zhangjianwei@tuntunlian.com ，我们将虚心接受并适时修改本服务条款及相关政策、规则。

10.3 本协议内容中以黑体、加粗等方式显著标识的条款，请用户着重阅读。

10.4 您完成注册且成为囤囤的注册用户则意味着您完全接受本服务条款，在注册之前请您再次确认已知悉并完全理解本服务条款的全部内容。

                """,
                "tun_level_intro": """
成长值说明：
1. 成长值是囤个茶用户通过交易消费、签到等获得的，成长值的累计总额决定会员等级
2. 成长值有什么作用？
成长值达到相应等级，即可享受该等级对应的权益，成长值约高，获得的权益越丰厚。
3. 怎样才能增加成长值？
每次参与签到、交易、分享、推荐新用户、获得更多的收益都可以增加成长值。

成长值规则：
1. 每签到一次，增加1点成长值，连续签到一周，奖励5点成长值。
2. 每分享一次，增加1点成长值。
3. 每成功推荐一名新用户，奖励10点成长值，通过推荐码进行实名注册的新用户视为成功推荐。
4. 每成功购买一次或挂单成功交易，增加5点成长值。
5. 每囤茶100g，增加1点成长值，不足100g不能增加成长值。
6. 挂单价为囤茶价1倍以上，并成功交易，每翻一倍，奖励20点成长值。

小白菜囤家：成长值小于50点

V1灰铁囤家：成长值满50点
             1. 每年提货包邮一次

V2青铜囤家：成长值满200点
             1. 每年提货包邮三次
             2. 免费获得试饮装一份

V3白银囤家：成长值满500点
             1. 每年提货包邮五次
             2. 免费获得试饮装两份
             3. 每年可免费在线下体验体品茶活动一次

V4黄金囤家：成长值满1000点
               1. 每年提货包邮五次
               2. 免费获得试饮装五份
               3. 每年可免费在线下体验体品茶活动三次
               4. 每笔交易手续费减免0.5%


V5铂金囤家：成长值满2000点
               1. 每年提货包邮六次
               2. 免费获得试饮装八份
               3. 每年可免费在线下体验体品茶活动六次
               4. 每笔交易手续费减免0.5%
               5. 每笔库存费减免5%

V6钻石囤家：成长值满5000点
               1. 每年提货包邮六次
               2. 免费获得试饮装八份
               3. 每年可免费在线下体验体品茶活动六次
               4. 每笔交易手续费减免1%
               5. 每笔库存费减免10%

V7最强囤主：成长值满20000点
             1. 每年提货包邮十次
             2. 免费获得试饮装十份
             3. 每年可免费在线下体验体品茶活动十次
             4. 每笔交易手续费减免1%
             5. 每笔库存费减免15%
             6. 每年平台首发产品有两次优先囤茶权（提前1小时）


V8殿堂囤主：成长值满50000点
               1. 提货永久包邮
               2. 每一款首发产品，均可免费获得试饮装1份
               3. 每年可免费在线下体验体品茶活动十次
               4. 每笔交易手续费减免1%
               5. 每笔库存费减免20%
               6. 每年平台首发产品有五次优先囤茶权（提前1小时）

                """
            }
        ]
    }
]

db_views = [
    {
        "name": "统计当前查询时刻用户持仓的所有区块的关联产品的最新价格",
        "sql": """
            create or replace view view_goodsblock_with_product_info as
                select
                    gb.id,
                    p.last_trade_price,
                    gb.owner_user_id
                from
                    product_goodsblock as gb ,
                    product_product as p
                where
                    gb.product_id = p.id
                    and gb.owner_user_id is not null
                    and gb.owner_user_id != '';
        """
    },
    {
        "name": "用户持仓视图",
        "sql": """
            create or replace view view_user_product as
            select
                a.owner_user_id,
                a.product_id,
                a.user_keep_count,
                p.logo_public_file_id,
                p.name,
                p.last_trade_price,
                p.up_down_percent,
                p.avg_price_custom as avg_price,
                a.owner_user_id || a.product_id as id,
                p.brand_id,
                b.name as brand_name
            from
                (select count(*) as user_keep_count, owner_user_id, product_id from product_goodsblock where trade_type != 'TAKE_OUT' and owner_user_id != '' group by owner_user_id, product_id) as a,
                product_product as p,
                product_brand as b
            where
                a.product_id=p.id and p.brand_id = b.id;
        """
    }
]

class Command(BaseCommand):
    help = "Init data for models which has init_data var"

    def handle(self, *args, **options):
        for data in datas:
            model = data['model']
            rows = data['rows']
            if model.objects.filter():
                continue
            for row in rows:
                model.objects.create(**row)
            print('Model: %s  Rows: %d' % (model, len(rows)))

        print("!!!!!!  Don't Forget Create Database Views And Grant Privileges")
        for db_view in db_views:
            name = db_view['name']
            sql = db_view['sql']
            print('--------%s------' % name)
            print(sql)
            print()


